home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr48 / p_robo31.zip / WERUN1.PR < prev    next >
Text File  |  1993-02-10  |  7KB  |  198 lines

  1. (**************************************************************************)
  2. (*                             W A R N I N G                              *)
  3. (*                                                                        *)
  4. (*  This Robot has NOT been designed to take advantage of the advanced    *)
  5. (*  features of P-ROBOTS, such as, Shields, Fuel or Obstructions.         *)
  6. (**************************************************************************)
  7.  
  8.   {****************************************************************** }
  9.   {  robot  WERUN1.pr             Sandra Swetnick Unger   Dec 6, 1989 }
  10.   {                 tag team with WERUN2.pr                           }
  11.   {****************************************************************** }
  12.  
  13.   PROCEDURE werun1;
  14.  
  15.   TeamAlly = "werun2";
  16.  
  17.   VAR
  18.     drv_dir : Integer;            { drive direction }
  19.     scn_dir : Integer;            { scan direction }
  20.     range : Integer;              { range to oponent }
  21.     x, y : Integer;               { x and y coordinates }
  22.     z : Integer;                  { z defines the edge of a square     }
  23.                                   { when z exceeds a predefined value  }
  24.                                   { the robot is approaching a wall    }
  25.     I : Integer;                  { looping variable  }
  26.     N : Integer;                  { width of the scan }
  27.     newscan : Integer;            { most recent scan direction }
  28.     x_max : Integer;
  29.     y_max : Integer;
  30.     x_switch : Integer;
  31.     y_switch : Integer;
  32.     {******************************************************************}
  33.     {  Determine if the enemy robot is a "Hunter" or a "non-Hunter"    }
  34.     {  Sit and wait for the enemy robot to attack                      }
  35.     {******************************************************************}
  36.  
  37.   BEGIN                           { Main }
  38.  
  39.   
  40.     drv_dir := Angle_To(100, 500);
  41.     DRIVE(drv_dir, 100);
  42.  
  43.     scn_dir := Angle_To(500, 500)-90;
  44.     REPEAT                        { find the enemy }
  45.       scn_dir := scn_dir+20;
  46.       range := SCAN(scn_dir, 10);
  47.     UNTIL range <> 0;
  48.  
  49.     CANNON(scn_dir, range);
  50.     CANNON(scn_dir, range-20);
  51.  
  52.     {******************************************************************}
  53.     BEGIN
  54.  
  55.       REPEAT                      { get to a side }
  56.         x := loc_x;
  57.         FOR I := -N TO N DO
  58.           BEGIN
  59.             newscan := scn_dir+(20*I);
  60.             range := SCAN(newscan, 10);
  61.             IF (range <> 0) THEN
  62.               BEGIN
  63.                 CANNON(newscan, range);
  64.                 I := N;
  65.                 range := SCAN(newscan, 10);
  66.                 CANNON(newscan, range);
  67.               END;
  68.           END;
  69.         IF (range > 10) THEN scn_dir := newscan
  70.         ELSE scn_dir := scn_dir+90;
  71.         IF range > 25 THEN CANNON(newscan-12, range);
  72.         IF range = 0 THEN N := 2
  73.         ELSE N := 1;
  74.         IF range > 10 THEN CANNON(newscan+12, range);
  75.         DRIVE(drv_dir, 100);
  76.       UNTIL x < 250;
  77.  
  78.       REPEAT
  79.         REPEAT
  80.           drv_dir := Angle_To(100, 100);
  81.           DRIVE(drv_dir, 100);
  82.           FOR I := -N TO N DO
  83.             BEGIN
  84.               newscan := scn_dir+(20*I);
  85.               range := SCAN(newscan, 10);
  86.               IF (range > 10) THEN
  87.                 BEGIN
  88.                   CANNON(newscan, range);
  89.                   I := N;
  90.                   range := SCAN(newscan, 10);
  91.                   CANNON(newscan, range);
  92.                 END;
  93.             END;
  94.           IF (range > 10) THEN scn_dir := newscan
  95.           ELSE IF x < 120 THEN scn_dir := 0
  96.           ELSE IF x > 880 THEN scn_dir := 180
  97.           ELSE IF y < 120 THEN scn_dir := 90
  98.           ELSE IF y > 880 THEN scn_dir := 270
  99.           ELSE scn_dir := scn_dir+90;
  100.           IF range > 10 THEN CANNON(newscan, range+15);
  101.           IF range = 0 THEN N := 2
  102.           ELSE N := 1;
  103.           IF range > 25 THEN CANNON(newscan, range-15);
  104.           y := loc_y;
  105.         UNTIL y < 250;
  106.  
  107.  
  108.         REPEAT
  109.           drv_dir := Angle_To(900, 100);
  110.           DRIVE(drv_dir, 100);
  111.           FOR I := -N TO N DO
  112.             BEGIN
  113.               newscan := scn_dir+(20*I);
  114.               range := SCAN(newscan, 10);
  115.               IF (range > 10) THEN
  116.                 BEGIN
  117.                   CANNON(newscan, range);
  118.                   I := N;
  119.                   range := SCAN(newscan, 10);
  120.                   CANNON(newscan, range);
  121.                 END;
  122.             END;
  123.           IF (range > 10) THEN scn_dir := newscan
  124.           ELSE IF x < 120 THEN scn_dir := 0
  125.           ELSE IF x > 880 THEN scn_dir := 180
  126.           ELSE IF y < 120 THEN scn_dir := 90
  127.           ELSE IF y > 880 THEN scn_dir := 270
  128.           ELSE scn_dir := scn_dir+90;
  129.           IF range > 10 THEN CANNON(newscan, range+15);
  130.           IF range = 0 THEN N := 2
  131.           ELSE N := 1;
  132.           IF range > 25 THEN CANNON(newscan, range-15);
  133.           x := loc_x;
  134.         UNTIL x > 750;
  135.  
  136.  
  137.         REPEAT
  138.           drv_dir := Angle_To(900, 900);
  139.           DRIVE(drv_dir, 100);
  140.           FOR I := -N TO N DO
  141.             BEGIN
  142.               newscan := scn_dir+(20*I);
  143.               range := SCAN(newscan, 10);
  144.               IF (range > 10) THEN
  145.                 BEGIN
  146.                   CANNON(newscan, range);
  147.                   I := N;
  148.                   range := SCAN(newscan, 10);
  149.                   CANNON(newscan, range);
  150.                 END;
  151.             END;
  152.           IF (range > 10) THEN scn_dir := newscan
  153.           ELSE IF x < 120 THEN scn_dir := 0
  154.           ELSE IF x > 880 THEN scn_dir := 180
  155.           ELSE IF y < 120 THEN scn_dir := 90
  156.           ELSE IF y > 880 THEN scn_dir := 270
  157.           ELSE scn_dir := scn_dir+90;
  158.           IF range > 10 THEN CANNON(newscan, range+15);
  159.           IF range = 0 THEN N := 2
  160.           ELSE N := 1;
  161.           IF range > 25 THEN CANNON(newscan, range-15);
  162.           y := loc_y;
  163.         UNTIL y > 750;
  164.  
  165.  
  166.         REPEAT
  167.           drv_dir := Angle_To(100, 900);
  168.           DRIVE(drv_dir, 100);
  169.           FOR I := -N TO N DO
  170.             BEGIN
  171.               newscan := scn_dir+(20*I);
  172.               range := SCAN(newscan, 10);
  173.               IF (range > 10) THEN
  174.                 BEGIN
  175.                   CANNON(newscan, range);
  176.                   I := N;
  177.                   range := SCAN(newscan, 10);
  178.                   CANNON(newscan, range);
  179.                 END;
  180.             END;
  181.           IF (range > 10) THEN scn_dir := newscan
  182.           ELSE IF x < 120 THEN scn_dir := 0
  183.           ELSE IF x > 880 THEN scn_dir := 180
  184.           ELSE IF y < 120 THEN scn_dir := 90
  185.           ELSE IF y > 880 THEN scn_dir := 270
  186.           ELSE scn_dir := scn_dir+90;
  187.           IF range > 10 THEN CANNON(newscan, range+15);
  188.           IF range = 0 THEN N := 2
  189.           ELSE N := 1;
  190.           IF range > 25 THEN CANNON(newscan, range-15);
  191.           x := loc_x;
  192.         UNTIL x < 250;
  193.  
  194.       UNTIL DEAD OR WINNER;
  195.     END;                          { end TAG }
  196.  
  197.   END;                            { Main}
  198.